package com.suliu.practice.thread;

public class FetchMoneyTest {
	public static void main(String[] args) {
		/*Thread类也实现了Runnable接口，因此也要实现run方法
		 * 不要使用stop来停止线程。而要让run自然结束。
		 */
		Bank bank=new Bank();
		Thread t1=new MoneyThread(bank);//柜台
		Thread t2=new MoneyThread(bank);//ATM
		t1.start();
		t2.start();
	}
}
//账户取钱的例子：同步问题。java中每个对象都有一个锁lock或者叫做监视器monitor，当访问某个对象的synchronized方法时，表示将该对象上锁。
class Bank{
	private int money=1000;
	public synchronized int getMoney(int number){//同步方法
		if(number<0)return -1;
		else if(number > money)return -2;
		else if(money<0)return -3;
		else{
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			money-=number;
			System.out.println("left money:"+money);//不同步的话，两个-600或一个200一个-600
			return number;
		}
	}
}
class MoneyThread extends Thread{
	private Bank bank;
	public MoneyThread(Bank bank){
		this.bank =bank;
	}
	@Override
	public void run() {
		System.out.println(bank.getMoney(800));
	}
}